﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuanLyHocPhi.Model;

namespace QuanLyHocPhi.BLL
{
    partial class BizSinhVien
    {
        /// <summary>
        /// Lấy sinh viên theo mã sinh viên
        /// </summary>
        /// <param name="maSinhVien">Mã sinh viên</param>
        /// <returns></returns>
        internal static SinhVien GetSinhVienByMSV(string maSinhVien)
        {
            using (var context = new QLHPEntities())
            {
                var sinhvien = (from sv in context.SinhVienDbSet.Include("LopGoc.LoaiHinhDaoTao")
                                where sv.MaSinhVien == maSinhVien
                                select sv).SingleOrDefault();
                return sinhvien;
            }
        }

        /// <summary>
        /// Lấy danh sách sinh viên, trong đó có tính tổng tiền đã nộp cho một học kỳ nào đó
        /// </summary>
        /// <param name="maLopGoc"></param>
        /// <param name="maHocKy"></param>
        /// <param name="laHocPhi"></param>
        /// <returns></returns>
        internal static List<CustomSinhVien> GetDanhSachSinhVien(string maLopGoc, string maHocKy, bool laHocPhi = true, string ten = null)
        {
            using (var context = new QLHPEntities())
            {
                try
                {
                    var sinhvien = (from sv in context.SinhVienDbSet
                                    where sv.MaLopGoc == maLopGoc && (ten == null || sv.Ten.Contains(ten))
                                    select new CustomSinhVien
                                    {
                                        DaChon = false,
                                        MaSinhVien = sv.MaSinhVien,
                                        HoDem = sv.HoDem,
                                        Ten = sv.Ten,
                                        NgaySinh = sv.NgaySinh,
                                        SoTienDaNop = context.PhieuThuDbSet.Where
                                        (
                                            t =>
                                            (t.BienCheSinhVienVaoHocKy.MaSinhVien == sv.MaSinhVien) &&
                                            (t.BienCheSinhVienVaoHocKy.MaHocKy == maHocKy) &&
                                            (laHocPhi ? t.LaHocPhi == true : t.LaHocPhi == false)
                                        ).Sum(e => e.SoTien)
                                    });
                    return sinhvien.ToList();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        /// <summary>
        /// Lấy danh sách sinh viên của một lớp
        /// </summary>
        /// <param name="maLopGoc"></param>
        /// <returns></returns>
        internal static List<SinhVien> GetDanhSachSinhVien(string maLopGoc)
        {
            using (var context = new QLHPEntities())
            {
                try
                {
                    var sinhvien = from sv in context.SinhVienDbSet
                                   where sv.MaLopGoc == maLopGoc
                                   select sv;
                    return sinhvien.ToList();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

    }
    [System.ComponentModel.DataAnnotations.Schema.NotMapped]
    class CustomSinhVien : SinhVien
    {
        public bool DaChon { get; set; }
        public int? SoTienDaNop { get; set; }
        public string SoTienDaNopStr
        {
            get { if (SoTienDaNop.HasValue) return SoTienDaNop.ToString().FormatCurrency(); else return ""; }
        }
    }
}
